package com.example.xinlijiankangsys.mapper;

import com.example.xinlijiankangsys.pojo.QuestionnaireRecord;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface QuestionnaireMapper {

    // 1. 插入或更新记录（主键冲突时更新分数）
    @Insert("INSERT INTO xinlijiankang.questionnaire_record_tb (questionnaire_id, user_id, score) " +
            "VALUES (#{questionnaireId}, #{userId}, #{score}) " +
            "ON DUPLICATE KEY UPDATE score = VALUES(score)")
    int insertOrUpdateQuestionnaireRecord(QuestionnaireRecord record);

    // 2. 根据主键查询单条记录
    @Select("SELECT questionnaire_id as questionnaireId,user_id as userId,score FROM xinlijiankang.questionnaire_record_tb " +
            "WHERE questionnaire_id = #{questionnaireId} AND user_id = #{userId}")
    QuestionnaireRecord selectByPrimaryKey(
            @Param("questionnaireId") int questionnaireId,
            @Param("userId") int userId);

    // 3. 根据用户ID查询所有问卷记录
    @Select("SELECT questionnaire_id as questionnaireId,user_id as userId,score FROM xinlijiankang.questionnaire_record_tb " +
            "WHERE user_id = #{userId}")
    List<QuestionnaireRecord> selectByUserId(@Param("userId") String userId);

    // 4. 根据问卷ID查询所有用户记录
    @Select("SELECT questionnaire_id as questionnaireId,user_id as userId,score FROM xinlijiankang.questionnaire_record_tb " +
            "WHERE questionnaire_id = #{questionnaireId}")
    List<QuestionnaireRecord> selectByQuestionnaireId(@Param("questionnaireId") int questionnaireId);

    // 5. 更新记录分数（非主键字段）
    @Update("UPDATE xinlijiankang.questionnaire_record_tb SET score = #{score} " +
            "WHERE questionnaire_id = #{questionnaireId} AND user_id = #{userId}")
    int updateScore(
            @Param("questionnaireId") int questionnaireId,
            @Param("userId") String userId,
            @Param("score") int score);

    // 6. 删除指定记录
    @Delete("DELETE FROM xinlijiankang.questionnaire_record_tb " +
            "WHERE questionnaire_id = #{questionnaireId} AND user_id = #{userId}")
    int deleteByPrimaryKey(
            @Param("questionnaireId") int questionnaireId,
            @Param("userId") String userId);

    // 7. 获取用户某个问卷的得分
    @Select("SELECT score FROM xinlijiankang.questionnaire_record_tb " +
            "WHERE questionnaire_id = #{questionnaireId} AND user_id = #{userId}")
    Integer getScoreByUserAndQuestionnaire(
            @Param("questionnaireId") int questionnaireId,
            @Param("userId") String userId);

    // 8. 获取问卷的平均分
    @Select("SELECT AVG(score) FROM xinlijiankang.questionnaire_record_tb " +
            "WHERE questionnaire_id = #{questionnaireId}")
    Double getAverageScoreByQuestionnaire(@Param("questionnaireId") int questionnaireId);

    // 9. 获取用户完成问卷的数量
    @Select("SELECT COUNT(*) FROM xinlijiankang.questionnaire_record_tb " +
            "WHERE user_id = #{userId}")
    int countByUserId(@Param("userId") String userId);

    // 10. 检查用户是否已完成某问卷
    @Select("SELECT COUNT(*) FROM xinlijiankang.questionnaire_record_tb " +
            "WHERE questionnaire_id = #{questionnaireId} AND user_id = #{userId}")
    int existsByUserAndQuestionnaire(
            @Param("questionnaireId") int questionnaireId,
            @Param("userId") String userId);
    // 11.检测用户是否需要预警
    @Select("SELECT COUNT(*) > 0 FROM xinlijiankang.questionnaire_record_tb " +
            "WHERE user_id = #{userId} AND score >= #{warningThreshold}")
    boolean needsWarning(
            @Param("userId") String userId,
            @Param("warningThreshold") int warningThreshold);
}